package com.hhh.corejava.code02_运算符;

/**
 * @autor 黄焕晖
 * @date 2025年10月19日16:23
 **/
public class Test12_位运算符 {
    public static void main(String[] args) {
        int num1=5,num2=8;
        //00000000 000000000 00000000 00000101
        //00000000 000000000 00000000 00001000
        //00000000 000000000 00000000 00000000
        System.out.println(num1&num2);//1&1=1 0&1=0 1&0=0 0&0=0
        //00000000 000000000 00000000 00000101
        //00000000 000000000 00000000 00001000
        //00000000 000000000 00000000 00001101
        System.out.println(num1|num2);//1|1=0 0|1=1 1|0=1 0|0=0
        //00000000 000000000 00000000 00000101
        //11111111 111111111 11111111 11111010  补码
        //反码：11111111 111111111 11111111 11111001
        //原码：10000000 000000000 00000000 00000110=-6
        System.out.println(~num1);
        //00000000 000000000 00000000 00001000
        //11111111 111111111 11111111 11110111  补码
        //反码：11111111 111111111 11111111 11110110
        //原码：10000000 000000000 00000000 00001001=-9
        System.out.println(~num2);

        //00000000 000000000 00000000 00000101
        //00000000 000000000 00000000 00001000
        //00000000 000000000 00000000 00001101=13
        System.out.println(num1^num2);//1^1=0 0^1=1 1^0=1 0^0=0

        //00000000 000000000 00000000 00000101
        //00000000 000000000 00000000 00010100=20
        System.out.println(num1<<2);

        //00000000 000000000 00000000 00001000
        //00000000 000000000 00000000 00100000=32
        System.out.println(num2<<2);


        //10000000 000000000 00000000 00000101
        //反码：11111111 111111111 11111111 11111010
        //补码：11111111 111111111 11111111 11111011
        //右移2位：111111 111111111 11111111 11111110 11
        //11111111 111111111 11111111 11111110
        //反码：11111111 111111111 11111111 11111101
        //原码：10000000 000000000 00000000 00000010=-2

        System.out.println(-5>>2);

        //10000000 000000000 00000000 00001000
        //反码：11111111 111111111 11111111 11110111
        //补码：11111111 111111111 11111111 11111000
        //右移2位：111111 11111111 11111111 11111110 00
        //11111111 11111111 11111111 11111110
        //反码：11111111 11111111 11111111 11111101
        //原码：10000000 00000000 00000000 00000010=-2
        System.out.println(-8>>2);

        //10000000 000000000 00000000 00001000
        //反码：11111111 111111111 11111111 11110111
        //补码：11111111 111111111 11111111 11111000
        //右移2位：111111 11111111 11111111 11111110 00
        //00111111 11111111 11111111 11111110=1,073,741,822
        System.out.println(-8>>>2);

    }
}
